﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CurriculasController;
using CurriculasEntities;
using System.Data;



namespace GestionCurriculos
{
    public partial class frmRegItinerario : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                int codPlan = 0;
                lblTitulo.Text = "Registrar Itinerario";
                Util.tbCurso.Clear();
                Util.listaCursos.Clear();
                Util.Inicializar();

                if (Request.QueryString["idPlan"] != null)
                {
                    codPlan = int.Parse(Request.QueryString["idPlan"]);
                  
                    lblTitulo.Text = "Modificar Itinerario";
                    //Cargar Datos Curso
                    ObtenerItinerario(codPlan);
                    cboPlanCurricular.Enabled = false;
                }


                //CARGAR COMBOS
                ListarPlanes();
                ListarCursos();

            }
        }

        private void ObtenerItinerario(int codPlan)
        {
            ItinerarioFormativoBL objBl = new ItinerarioFormativoBL();
            ItinerarioFormativoBE objBE = new ItinerarioFormativoBE();
            List<ItinerarioFormativoBE> listItinerario = new List<ItinerarioFormativoBE>();
            objBE.codPlanCurricular = codPlan;

            listItinerario = objBl.ListarTodos().Where(p => p.codPlanCurricular == codPlan).ToList();

            cboPlanCurricular.SelectedValue = objBE.codPlanCurricular.ToString();
            txtVersion.Text = new PlanCurricularBL().Obtener(codPlan).nroVersion.ToString();

            foreach (ItinerarioFormativoBE itfor in listItinerario) {
                CursoItinerario ci = new CursoItinerario();
                ci.ciclo = itfor.ciclo;
                ci.codCurso = itfor.codCurso;
                ci.nomCurso = new CursoBL().Obtener(itfor.codCurso).nomCurso;

                Util.listaCursos.Add(ci);
            }

            gvCursos.DataSource = Util.listaCursos.OrderByDescending(p => p.ciclo);
            gvCursos.DataBind();
        }
       
        private void ListarPlanes()
        {
            //CARGAR PAISES
            List<PlanCurricularBE> _planes = new PlanCurricularBL().ListarTodos().ToList();
            cboPlanCurricular.DataSource = _planes;
            cboPlanCurricular.DataTextField = "nombreplan";
            cboPlanCurricular.DataValueField = "codPlanCurricular";
            cboPlanCurricular.DataBind();
            cboPlanCurricular.Items.Insert(0, "Seleccionar");
        }

        private void ListarCursos()
        {
            //CARGAR PAISES
            List<CursoBE> _cursos = new CursoBL().ListarTodos().Where(c=> c.estado == "1").ToList();
            cboCurso.DataSource = _cursos;
            cboCurso.DataTextField = "nomCurso";
            cboCurso.DataValueField = "codCurso";
            cboCurso.DataBind();
            cboCurso.Items.Insert(0, "Seleccionar");
        }


       

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            ItinerarioFormativoBL objBL = new ItinerarioFormativoBL();
            ItinerarioFormativoBE objBE = new ItinerarioFormativoBE();
            ItinerarioFormativoBE objBEObtener = new ItinerarioFormativoBE();

            if (Util.listaCursos.Count == 0)
            {
                lblCiclo.Visible = true;
                lblCurso.Visible = true;
            }
            else
            {

                try
                {
                    objBE.codPlanCurricular = int.Parse(cboPlanCurricular.SelectedValue);
                    //objBE.codCurso = int.Parse(cboCurso.SelectedValue);
                    //objBE.ciclo = int.Parse(cboCiclo.SelectedValue);
                    objBE.estado = "1";



                    try
                    {

                        if (Request.QueryString["idPlan"] != null)
                        {

                            objBE.codPlanCurricular = int.Parse(Request.QueryString["idPlan"]);

                            objBL.EliminarPorPlan(objBE.codPlanCurricular);

                            //ELIMINAR TODOS LOS REGISTROS.

                            foreach (CursoItinerario ci in Util.listaCursos)
                            {
                                objBE.ciclo = ci.ciclo;
                                objBE.codCurso = ci.codCurso;
                                objBE.codCurso = objBL.Crear(objBE);
                            }




                            Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction2", "alert('Se modificó satisfactoriamente el itinerario relacionado al plan curricular con código " + objBE.codPlanCurricular + "');window.location.assign('frmItinerario.aspx');", true);
                            //Limpiar();
                        }
                        else
                        {

                            //objBEObtener = objBL.Obtener(objBE.codPlanCurricular, objBE.codCurso);
                            string mensaje = "";
                            //if (objBEObtener != null)
                            //{
                            //    mensaje = "alert('El itinerario que desea crear ya existe.');";    //window.location.assign('frmItinerario.aspx');
                            //}
                            //else {
                            objBL.EliminarPorPlan(objBE.codPlanCurricular);
                            foreach (CursoItinerario ci in Util.listaCursos)
                            {
                                objBE.ciclo = ci.ciclo;
                                objBE.codCurso = ci.codCurso;
                                objBE.codCurso = objBL.Crear(objBE);
                            }

                            mensaje = "alert('Se registró satisfactoriamente el itinerario relacionado al plan curricular con código " + objBE.codPlanCurricular + "');window.location.assign('frmItinerario.aspx');";

                            //}



                            Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction2", mensaje, true);
                            //Limpiar();
                        }

                    }
                    catch (Exception ex)
                    {

                    }
                }
                catch (Exception ex)
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction2", "alert('Ingrese los datos correctamente.')", true);
                }
            }
        }

        //private void Limpiar()
        //{
        //    txtCurso.Text = "";
        //    txtPerfil.Text = "";
        //    txtHoras.Text = "";
        //    txtCreditos.Text = "";
        //    cboArea.SelectedIndex = 0;

        //    Response.Redirect("frmCurso.aspx");
        //}

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("frmItinerario.aspx");
        }

        protected void btnAgregarCurso_Click(object sender, EventArgs e)
        {
            if (cboCurso.SelectedValue == "Seleccionar")
            {
                lblCurso.Visible = true;
            }
            else if (cboCiclo.SelectedValue == "Seleccionar")
            {
                lblCurso.Visible = false;
                lblCiclo.Visible = true;

            }
            else {
                CursoItinerario ci = new CursoItinerario();
                CursoItinerario itinerario = new CursoItinerario();

                ci.ciclo = int.Parse(cboCiclo.SelectedValue);
                ci.codCurso = int.Parse(cboCurso.SelectedValue);
                ci.nomCurso = cboCurso.SelectedItem.Text;
                ci.fecha = DateTime.Now;

                itinerario = Util.listaCursos.Find(p => p.codCurso == ci.codCurso);
                if (itinerario != null)
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction2", "alert('El curso seleccionado ya ha sido agregado al itinerario.')", true);
                }
                else
                {
                    lblCiclo.Visible = false;
                    lblCurso.Visible = false;

                    Util.listaCursos.Add(ci);

                    cboCiclo.SelectedIndex = 0;
                    cboCurso.SelectedIndex = 0;

                    gvCursos.DataSource = Util.listaCursos.OrderByDescending(p => p.fecha);
                    gvCursos.DataBind();

                }
            
            }
          
           
        }

        protected void cboPlanCurricular_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboPlanCurricular.SelectedValue != "Seleccionar")
            {
                PlanCurricularBE pcBE = new PlanCurricularBL().Obtener(int.Parse(cboPlanCurricular.SelectedValue));
                txtVersion.Text = pcBE.nroVersion.ToString();
                Util.listaCursos.Clear();
                ObtenerItinerario(int.Parse(cboPlanCurricular.SelectedValue));
            }
            else {
                txtVersion.Text = "";
            }
            
        }

        protected void gvCursos_RowDeleting (Object sender, GridViewDeleteEventArgs e)
        {

            string ciclo = gvCursos.Rows[e.RowIndex].Cells[0].Text;
            string codCurso = gvCursos.Rows[e.RowIndex].Cells[1].Text;
            string nomCurso = gvCursos.Rows[e.RowIndex].Cells[2].Text;
            CursoItinerario ci = new CursoItinerario();
            ci.ciclo = int.Parse(ciclo);
            ci.codCurso =int.Parse( codCurso);
            ci.nomCurso = nomCurso;

            int indexCur = Util.listaCursos.FindIndex(p => p.ciclo == ci.ciclo && p.codCurso == ci.codCurso);

            Util.listaCursos.RemoveAt(indexCur);

            gvCursos.DataSource = Util.listaCursos.OrderByDescending(p => p.fecha);
            gvCursos.DataBind();
        }  


        
    }
}